/**
 * 
 */
package ocumed.persistenz.tests;

import junit.framework.TestCase;
import ocumed.persistenz.dao.DAOFactory;
import ocumed.persistenz.dao.LeistungDAO;
import ocumed.persistenz.hibernate.HibernateUtil;
import ocumed.persistenz.hibernate.OcLeistung;

import org.hibernate.SessionFactory;

/**
 * test leistung 
 * 
 * @author Daniel Rudigier
 *
 */
public class TestLeistung extends TestCase {
    
    /**
     * 
     */
    public TestLeistung() {
        // TODO Auto-generated constructor stub
    }
    
    /**
     * test 1, find a leistung
     */
    public void testInstance() {
        // get the db access interface for leistung
        LeistungDAO lDAO = DAOFactory.get(DAOFactory.RDBMS).getLeistungDAO();
        
        // start a new transaction
        lDAO.start();
        
        // find a "leistung" having the id : 2 in the db 
        OcLeistung l = lDAO.findById(2);        
        
        // l is a transient object (local), it won't be updated yet
        if (l != null) {
            l.setLeistungbezeichnung("leck mich!");
            
            // attach the object again for updating with the db
            lDAO.attachDirty(l);
            //lDAO.attachClean(l);
            
            // create another transient instance 
            OcLeistung newl = new OcLeistung();
            newl.setLeistungbezeichnung("jojo");
            newl.setLeistungcode("456");
            
            // this object exists currently only locally. 
            // tell DAO to create a new row in the DB table (persist) 
            lDAO.persist(newl);
            
            // now commit the transaction, because we want to
            lDAO.commit();
            
            // oops, something failed, we want to rollback
            lDAO.rollback();
        }
        
        assertEquals(l != null, true);
        
        System.out.println("leistung from db:");
        System.out.println(l.getLeistungbezeichnung());
        System.out.println(l.getLeistungcode());           
    }
    
    /**
     * print them all
     */
    public void testList() {
        LeistungDAO lDAO = DAOFactory.get(DAOFactory.RDBMS).getLeistungDAO();
        lDAO.start();
        // we want to have something, returning more than one single object
        // lDAO.findByLeistungName("string that matches");
        
        // do something with the lists
        for (OcLeistung l : lDAO.findAll()) {
            System.out.println(l.getLeistungid());
            System.out.println(l.getLeistungbezeichnung());
        }
    }
    
    /**
     * create a new one
     */
    public void testNeueLeistung() {
        SessionFactory sf = HibernateUtil.getSessionFactory();
        sf.getCurrentSession().beginTransaction();
        
        OcLeistung o = new OcLeistung();
        o.setLeistungbezeichnung("hibernate");
        o.setLeistungcode("12345");
        
        Integer id = (Integer) sf.getCurrentSession().save(o);
        
        sf.getCurrentSession().getTransaction().commit();
        
        System.out.println("inserted leistung id is ..." + id);
    }
    
    
}
